package beans;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import dao.ActividadDao;
import dao.ProyectoDao;
import excepciones.DaoException;

import modelo.Actividad;
import modelo.Proyecto;

@ManagedBean 
@RequestScoped
public class EditarActividadesBean {

	@ManagedProperty(value="#{editProyectoBean}")
	private EditProyectoBean editProyectoBean;
	
	private List<Actividad> actividades;
	private List<Actividad> seleccionBorrar;
	private Proyecto proyecto;
	private List <Actividad> seleccionActividad;
	private List<Actividad> todasActividades;	

	@PostConstruct
	public void init(){
		
		// Seteo el proyecto a utilizar
		this.setProyecto(this.getEditProyectoBean().getProyecto());
		// Traigo las actividades
		this.setActividades((List<Actividad>) this.getProyecto().getMis_actividades());	
	
		ActividadDao actividadDao = new ActividadDao();
		try {
			this.setTodasActividades(actividadDao.getTodasActividades());
		} catch (DaoException e) {
			e.printStackTrace();
		}
		
	}

	public void agregar(){
		List<Actividad> act = this.getActividades();
		List<Actividad> selec = this.getSeleccionActividad();
		for (Actividad activi : selec) {
			if (!getActividades().contains(activi))
				act.add(activi);
		}		
		this.setActividades(act);
		actualizarProyecto();
		
	}
	
	public void borrar(){
		List<Actividad> aBorrar = this.getSeleccionBorrar();
		
		for (Actividad activi : aBorrar) {
			this.getActividades().remove(activi);
		}
		actualizarProyecto();
		
	}
	
	/**
	 * Actualiza en la BD las modificaciones que se hicieron en el proyecto
	 */
	protected void actualizarProyecto(){
		ProyectoDao proDao = new ProyectoDao(proyecto);
		this.proyecto.setMis_actividades(actividades);
		try {
			proDao.update();
			proDao.closeEntityManager();
		} catch (DaoException e) {
			e.printStackTrace();
		}
	}
	
	public String volver(){
		return "irEditarProyectos";
	}

	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public List<Actividad> getActividades() {
		return actividades;
	}

	public void setActividades(List<Actividad> actividades) {
		this.actividades = actividades;
	}

	public List<Actividad> getSeleccionBorrar() {
		return seleccionBorrar;
	}

	public void setSeleccionBorrar(List<Actividad> seleccionBorrar) {
		this.seleccionBorrar = seleccionBorrar;
	}

	public List<Actividad> getSeleccionActividad() {
		return seleccionActividad;
	}

	public void setSeleccionActividad(List<Actividad> seleccionActividad) {
		this.seleccionActividad = seleccionActividad;
	}

	public List<Actividad> getTodasActividades() {
		return todasActividades;
	}

	public void setTodasActividades(List<Actividad> todasActividades) {
		this.todasActividades = todasActividades;
	}

	public EditProyectoBean getEditProyectoBean() {
		return editProyectoBean;
	}

	public void setEditProyectoBean(EditProyectoBean editProyectoBean) {
		this.editProyectoBean = editProyectoBean;
	}

	
}
